import store from "@/store";
import axios from "axios";
// import { response } from "express";
//qs做类型转换的
import qs from "querystring"

const errorHandle = (status,other)=>{
  switch(status){
    case 400:
      console.log("请求语法有问题，服务器无法识别");
      break;
    case 401:
      console.log("客户端无授权该请求。缺乏有效的身份认证凭证");
      break;
    case 403:
      console.log("服务器拒绝响应。权限不足");
      break;
    case 404:
      console.log("URL无效或者URL有效但是没有资源");
      break;
    default:
      console.log(other);
      break;
  }
}

// 创建axios对象
const instance = axios.create({
  timeout: 5000 //请求超时
})

// 全局配置
// instance.defaults.baseURL = "http://iwenwiki.com";
// token认证
// instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
// post请求数据类型格式
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

// 创建请求拦截和响应拦截操作
instance.interceptors.request.use(config=>{
  // 配置，post请求的处理
  if(config.method === 'post'){
    config.data = qs.stringify(config.data);
  }
  // 判断token是否存在，存在则携带，通过请求头
  const token = store.state.LoginModule.token;
  if(token){
    // Authorization认证信息
    config.headers.Authorization = token
  }
  return config;
},
error => Promise.reject(error)
)
/* 
  网络请求成功和失败->(访问着突然断网了)
  返回的数据的成功和失败->(后台访问也成功了，你给的参数是错误的，后台返回失败)
   */
instance.interceptors.response.use(
  response=> response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
  error => {
    const {response} = error
    if(response){
      // 响应状态码：400 401 402 ，视频里第二个参数为errorHandle.data
      errorHandle(response.status,response.data)
      return Promise.reject(response)
    }else{
      console.log("网络请求被中断");
    }
  }
  )
  export default instance